\chapter{Entwickeln mit Eclipse}\label{chap:eclipse}
\begin{center}
\includegraphics[scale=1]{eclipse.png} 
\textbf{Ein How-to für LCV Entwickler}
\end{center}

\section{Einleitung}
Diese Anleitung beschreibt die Vorgehensweise bei der Software-Entwicklung für das LCV Board mit dem Java-basierenden Eclipse IDE. Als generelle Einführung in die Software-Entwicklung für das LCV Board empfiehlt sich das Dokument \textit{LCV Software-Entwicklung}.
Die Anleitung hat Gültigkeit für die Eclipse Versionen 3.1 und 3.2, auf diesen Versionen wurde die Vorgehensweise getestet und bestätigt.
Für Teamentwicklungen wird das Subclipse Plugin empfohlen, es stellt eine Subversion Schnittstelle zur Verfügung. Die Projekthomepage lautet \url{http://subclipse.tigris.org/}, eine detaillierte Installationsanleitung ist unter \url{http://subclipse.tigris.org/install.html} verfügbar.

Diese Anleitung baut teilweise auf dem Blackfin Documentation Wiki\cite{wiki-eclipse} auf, wurde aber aufgrund einiger Ungereimtheiten komplett neu verfasst.

\section{Voraussetzungen}
\subsection{CDT-Plugin}
Für die Entwicklung von C/C++ Applikationen ist zwingend das Eclipse CDT Plugin erforderlich. Es kann auf der Seite \url{http://www.eclipse.org/cdt/downloads.php} heruntergeladen werden. Das Plugin ist in der Callisto Version von Eclipse unter \textit{Software Updates} bereits verfügbar.
\\\\
Die einfachste Art, das Plugin zu installieren ist folgende:
Unter \textit{Help $\rightarrow$ Software Updates $\rightarrow$ Find and Install\dots} \textit{Search for new features to install} selektieren. Nach einem Klick auf \textit{New Remote Site\dots} folgende Daten eingeben: \\
Name: CDT (frei wählbar) \\
URL: \url{http://download.eclipse.org/tools/cdt/releases/callisto} (Für Eclipse 3.2) \\
Die Eingabe mit OK bestätigen. Nach einem Klick auf \textit{Finish} verbindet sich Eclipse mit den entsprechenden Downloadseiten. Im erscheinenden Dialog \textit{Update Site Mirrors} empfielht es sich einen Mirror auszuwählen, der dem jeweiligen Standort am nächsten kommt.\\
Der nächste Dialog zeigt alle zur Installation verfügbaren Features an. Es müssen die \textit{Eclipse C/C++ Development Tools} installiert werden.\\
In den folgenden Schritten ist noch die Lizenzvereinbarungen zu akzeptiert und die Installation zu bestätigen.
Im Normalfall ist nach Abschluss der Installation ein Neustart von Eclipse erforderlich.
\subsection{Toolchain}
Das Cross-compiling setzt die Installation der Blackfin-Toolchain voraus. Für Details siehe \textit{Voraussetzungen für die Software-Entwicklung} (\ref{chap:voraussetzungen}).

\section{Projekt erstellen}
Als erstes muss ein neues C-Projekt erstellt werden, bei dem das Makefile manuell verwaltet wird:\\
\textit{File $\rightarrow$ New $\rightarrow$ Standard Make C Project}

\section{Projekt Einstellungen}
Da bei einem LCV-Projekt Cross-Compiling Unterstützung erforderlich ist, sind einige spezielle Einstellungen vorzunehmen. Die Einstellungen können direkt nach Angabe eines Projektnamen vorgenommen werden.
Später können die Einstellungen unter \textit{Projekt $\rightarrow$ Properties} und dann \textit{C/C++ Make Project} geändert werden.

\subsection{Make Builder}
In gewissen Fällen können die Voreinstellungen zu Problemen führen. Aus diesem Grund empfiehlt es sich, die Checkbox \textit{Use default}  zu deaktivieren und als \textit{Build command} ''make'' anzugeben.

\begin{center}
 \includegraphics[scale=1,width=450pt]{new_project_make_builder.png}
 \mycaption{figure}{Make Builder}
\end{center}

\subsection{Environment}
Damit der Blackfin Compiler für das Cross-Compiling gefunden wird, müssen in der PATH-Umgebungsvariable die Verzeichnisse, in denen sich die Toolchain Binärdateien befinden, angefügt werden. Einzelne Verzeichnispfade sind jeweils durch einen Doppelpunkt getrennt.\\
Um den Verzeichnispfad für die Toolchain Programme anzuhängen \textit{Select} klicken und im erscheinenden Fenster \textit{Select Environment Variables} die PATH Variable auswählen. Die Wahl mit einem Klick auf \textit{OK} bestätigen.
\begin{center}
 \includegraphics[width=200pt]{select_environment_variables.png}
 \mycaption{figure}{Wahl der Umgebungsvariablen}
\end{center}

Die PATH-Umgebungsvariable ist nun in der Liste aufgeführt. Über \textit{Edit} können nun unter \textit{Value} die benötigten Verzeichnisse angehängt werden. Standardmässig ist der folgende String hinzuzufügen (die Verzeichnispfade hängen vom Installationsort der Toolchain ab.):
\textit{:/opt/uClinux/bfin-linux-uclibc/bin:/opt/uClinux/bfin-uclinux/bin}
\begin{center}
 \includegraphics[width=450pt]{new_project_environment.png}
 \mycaption{figure}{Hinzugefügte Umgebungsvariable}
\end{center}
Damit sind alle notwendigen Einstellungen vorgenommen und das Projekt kann mit einem Klick auf \textit{Finish} erstellt werden.

\section{Make Target}
Damit mit dem Standard Make Builder die im Makefile konfigurierten Targets verwenden werden können, müssen diese hinzugefügt werden: \textit{Project $\rightarrow$ Create Make Target}\\
Im folgenden Dialog kann ein neues Make Target angegeben werden. Das folgende Beispiel fügt das Kommando \textit{make clean} hinzu.\\
Weitere Targets sind zum Beispiel \textit{target}, \textit{host} und \textit{all}.

\begin{center}
 \includegraphics[width=200pt]{create_make_target.png}
 \mycaption{figure}{Neues Make Target erstellen}
\end{center}

Die neu erstellten Make Targets können via\textit{ Project $\rightarrow$ Build Make Target} oder in der rechten Navigationsleiste unter \textit{Make targets} ausgeführt werden.

\section{LCV-Framework}
Um das LCV-Framework benutzen zu können, müssen im Projekt der Order lcv und das mitgelieferte Makefile hinzugefügt werden. Das Makefile ist so vorkonfiguriert, dass standardmässig alle C-Files die direkt in Projektordner liegen mitkompiliert werden. Möchten man nur eine bestimmte Auswahl von C-Files kompilieren, muss folgende Zeile des Makefiles angepasst werden.
\begin{alltt}
SOURCES := \$(wildcard *.c)
\end{alltt}
wird zu
\begin{verbatim}
SOURCES = meinfile1.c meinfile2.c etc.c
\end{verbatim}
Das Projekt wird für das Zielsystem mit \textit{make target} kompiliert. Für das Hostsystem lautet das Kommando \textit{make host}.

\section{Remote Debugging}
Es gibt verschiedene Möglichkeiten für remote Debugging, am verbreitetsten sind Debugging via serielle Schnittstelle oder Ethernet. Hier wird Debugging via Ethernet als attraktivste Variante behandelt.\\
Von der LCV Kamera wird remote Debugging via Ethernet mit dem GNU Debugger (gdb) unterstützt. Dazu muss allerdings erst eine neue Debug Konfiguration erstellt werden.\\
Unter \textit{Run $\rightarrow$ Debug\dots} kann mit einem Doppelklick auf \textit{C/C++ Local Application} ein neues Debug Target erstellt werden.

\begin{center}
 \includegraphics[width=450pt]{debug_main.png}
 \mycaption{figure}{Debugger - generelle Einstellungen}
\end{center}

Der Name der Debug Konfiguration ist frei wählbar. Unter \textit{C/C++ Application} muss die Binärdatei mit den Debuginformationen für das LCV-Board (Endung .gdb) ausgewählt werden.
\\\\
Unter dem Reiter \textit{Debugger} ist als Debugger der GDB Server (in Eclipse 3.2 gdbserver Debugger) auszuwählen. Auch die \textit{Debugger Options} müssen angepasst werden.\\
Der Pfad zum Blackfin GDB Debugger (bfin-uclinux-gdb) muss unter \textit{GDB debugger} angegeben werden. Der Eintrag \textit{GDB command file} kann leer gelassen werden.\\
Unter \textit{Connection} wird TCP ausgewählt und IP-Adresse inklusive Port des Zielsystems angegeben.

\begin{center}
 \includegraphics[width=450pt]{debug_debugger.png}
 \mycaption{figure}{Debugger - GDB Einstellungen}
\end{center}

Der \textit{Source Lookup Path} sollte ebenfalls kontrolliert werden. Er muss auf das gewünschte Projektverzeichnis verweisen.

\begin{center}
 \includegraphics[width=450pt]{debug_source.png}
 \mycaption{figure}{Debugger Quellen}
\end{center}

Damit ist die Debug Konfiguration abgeschlossen.\\
Um eine Debug Sitzung zu initialisieren muss als erstes der Debug Server auf dem Zielsystem gestartet werden.
Dazu folgenden Befehl auf der Kommandozeile des Zielsystems ausführen:
\begin{verbatim}
uClinux> gdbserver localhost:10000 <Programmname> &
\end{verbatim}

Mit dem Ampercent (\&) wird der Debugging Server von der Konsole abgelöst und im Hintergrund laufen gelassen, ansonsten können keine Kommandozeileneingaben mehr gemacht werden solange der GDB Server läuft. Das Problem ist, dass der Server nicht mit CTRL-C beendet werden kann und sich nur nach einer Debug Session beendet. Daher empfiehlt es sich, den Server im Hintergrund laufen zu lassen, so kann er gewünschtenfalls mit \textit{kill PID} beendet werden.\\
Es ist zu beachten, dass beim Programm der absolute oder relative Programmpfad angegeben werden muss, sofern das Programm sich nicht im \textit{/bin} Verzeichnis befindet.
Startet der GDB Server erfolgreich, erscheint eine Meldung in folgender Form:

\begin{verbatim}
Process myApp created; pid = 50                                                    
Listening on port 10000 
\end{verbatim}

Nun kann über \textit{Run $\rightarrow$ Debug $\rightarrow$ Debug Konfiguration} und mit einem Klick auf \textit{Debug} eine neue Debug Session gestartet werden.

\begin{center}
 \includegraphics[width=450pt]{debug_test.png}
 \mycaption{figure}{Debugger - Umgebung in Eclipse}
\end{center}
